package com.song.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class JwtUtils {

    // 与测试类中一致的秘钥
    private static final String SECRET_KEY = "YWRtaW4=";

    // 令牌过期时间设置为12小时
    private static final long EXPIRATION_TIME = TimeUnit.HOURS.toMillis(12);
    /**
     * 生成JWT令牌
     *
     * @param claims 要存储在令牌中的数据
     * @return 生成的JWT令牌字符串
     */
    public static String generateToken(Map<String, Object> claims) {
        return Jwts.builder().signWith(SignatureAlgorithm.HS256,SECRET_KEY)
                .addClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME))
                .compact();
    }

    /**
     * 解析JWT令牌
     *
     * @param jwt 令牌字符串
     * @return 令牌中包含的声明信息
     */
    public static Claims parseToken(String jwt) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(jwt)
                .getBody();
    }
}
